﻿FileInfoXP 0.1.3 x64
====================

FileInfoXP ist eine separate Windows-Explorer-Property-Sheet-Erweiterung, die den
alten Windows-XP-artigen Reiter "Dateiinfo" für klassische NTFS/OLE Property Sets
wieder bereitstellt.

Die DLL ist vollständig unabhängig von ADSStreams.

Felder
------

- Titel
- Betreff
- Autor
- Kategorie
- Stichwörter
- Kommentar
- Quelle
- Version

Technik
-------

FileInfoXP benutzt die von Windows bereitgestellte NTFS-Implementierung von
IPropertySetStorage/IPropertyStorage über StgOpenStorageEx(STGFMT_FILE).

Dadurch werden echte Property Sets in NTFS Alternate Data Streams geschrieben und
nicht ein FileInfoXP-eigenes Privatformat.

Zuordnung:

SummaryInformation
{F29F85E0-4FF9-1068-AB91-08002B27B3D9}
  PID 2  Titel
  PID 3  Betreff
  PID 4  Autor
  PID 5  Stichwörter
  PID 6  Kommentar
  PID 9  Version

DocumentSummaryInformation
{D5CDD502-2E9C-101B-9397-08002B2CF9AE}
  PID 2  Kategorie

MediaFileSummaryInformation
{64440492-4C8B-11D1-8B70-080036B11A03}
  PID 4  Quelle

SummaryInformation und DocumentSummaryInformation werden beim Neuanlegen als
ANSI-Property-Sets geschrieben, entsprechend den bereitgestellten Windows-XP-
Beispielen. "Quelle" wird als Unicode VT_LPWSTR geschrieben.

Vorhandene, von FileInfoXP nicht verwaltete Properties in denselben Property Sets
werden nicht absichtlich gelöscht. FileInfoXP verwendet die festen standardisierten
Property-IDs und legt keine zusätzliche Property-Namens-Dictionary an.

Build
-----

Benötigt Flat Assembler (FASM) mit win64ax.inc:

    fasm FileInfoXP.asm FileInfoXP.dll

Registrieren
------------

    %SystemRoot%\System32\regsvr32.exe FileInfoXP.dll

Abmelden:

    %SystemRoot%\System32\regsvr32.exe /u FileInfoXP.dll

Die Registrierung erfolgt pro Benutzer unter HKCU\Software\Classes und benötigt
normalerweise keine Administratorrechte.

Nach Austausch einer bereits von explorer.exe geladenen DLL kann ein Explorer-
Neustart erforderlich sein.

Bedienung
---------

1. Eigenschaften einer einzelnen Datei öffnen.
2. Reiter "Dateiinfo" auswählen.
3. Felder bearbeiten.
4. Mit "Übernehmen" oder "OK" speichern.

"Abbrechen" schreibt nicht angewendete Änderungen nicht.

Hinweise
--------

- Ziel ist Windows 10/11 x64.
- Die NTFS Property-Set-Implementierung setzt ein unterstütztes NTFS-Dateisystem voraus.
- Das Programm verändert den normalen Dateiinhalt nicht; Metadaten liegen in Property Sets.
- Die erste Version implementiert bewusst nur den editierbaren XP-artigen Dialog.
  Eine separate "Einfach/Erweitert"-Ansicht ist noch nicht enthalten.
- Der Quelltext wurde hier statisch geprüft, aber nicht mit einem lokalen FASM/Explorer
  ausgeführt. Der erste Build auf Windows ist daher der entscheidende Syntax-/Laufzeittest.


Hotfix 0.1.1
------------

0.1.1 ergänzt die PE-Basisrelokationen (.reloc / FASM fixups).

Ohne diese Relokationen konnte Windows die DLL nur dann laden, wenn der von FASM
bevorzugte Image-Base-Bereich frei war. War diese Adresse bereits durch eine andere
DLL belegt, konnte LoadLibrary/regsvr32 mit "Es wurde versucht, auf eine unzulässige
Adresse zuzugreifen" fehlschlagen. Dass derselbe Build manchmal geladen wurde und
manchmal nicht, passt genau zu einem solchen adressabhängigen Ladeproblem.

Für x64 immer die 64-Bit-Version verwenden:

    %SystemRoot%\System32\regsvr32.exe FileInfoXP.dll


Hotfix 0.1.2
------------

0.1.2 korrigiert die Property-Sheet-Schließpfade:

- PSN_KILLACTIVE wird jetzt explizit mit DWLP_MSGRESULT=FALSE bestätigt.
- PSN_RESET führt keine unnötige API-Funktion mehr aus.
- Der frühere PSN_RESET-Pfad verletzte die Win64-ABI, weil GetWindowLongPtrW ohne
  32-Byte-Shadow-Space und ohne korrekte Stackausrichtung aufgerufen wurde.
- PSM_UNCHANGED wird nach einem erfolgreichen Speichern nur beim echten
  "Übernehmen"-Vorgang gesendet, nicht während OK das Property Sheet bereits schließt.

Die Property-Set-Lese-/Schreiblogik und die .reloc-Korrektur aus 0.1.1 bleiben
unverändert.


Hotfix 0.1.3
------------

0.1.3 korrigiert die PSM_UNCHANGED-Konstante.

In 0.1.2 war versehentlich definiert:

    PSM_UNCHANGED = WM_USER + 105

WM_USER + 105 ist jedoch PSM_RESTARTWINDOWS.

Die korrekte Definition lautet:

    PSM_UNCHANGED = WM_USER + 109

Nach einem erfolgreichen Klick auf "Übernehmen" sendet FileInfoXP diese Nachricht an
das Eigenschaftenblatt, damit der Apply-Button wieder deaktiviert wird. Mit dem
falschen Nachrichtencode wurde stattdessen eine Restart-Windows-Property-Sheet-
Nachricht gesendet.

0.1.3 ändert nur diese Property-Sheet-Nachricht und den sichtbaren Versionsmarker.
Die .reloc-Korrektur aus 0.1.1 und die Schließpfad-Korrekturen aus 0.1.2 bleiben
unverändert.
